import { defineStore } from "pinia";

export const useCartStore = defineStore("cart", {
  state: () => ({
    // 购物车数据列表
    list: [],
    // 选中商品的ID列表
    selectList: [],
  }),
  getters: {
    // 判断是否全选
    isCheckedAll() {
      // 当购物车商品数量等于选中商品数量时，就是全选状态
      return this.list.length === this.selectList.length;
    },
    // 计算选中商品的总数和总价
    total(state) {
      let total = { num: 0, price: 0 }; // 只算选中的商品
      this.list.forEach((v) => {
        if (v.checked) {
          total.num += parseInt(v.goods_num); // 累加数量
          total.price += v.goods_price * v.goods_num;
        }
      });
      return total;
    },
  },
  actions: {
    // 初始化购物车列表
    cartList(cartArr) {
      this.list = cartArr; // 把后端返回的购物车数据存到list里
      // 默认让所有商品都选中
      cartArr.forEach((v) => {
        this.selectList.push(v.id);
      });
    },
    // 全选功能
    check_all() {
      this.selectList = this.list.map((v) => {
        v.checked = true; // 给每个商品打勾
        return v.id; // 把所有商品ID放到选中列表
      });
    },
    // 全不选功能
    un_check_all() {
      this.list.forEach((v) => {
        v.checked = false; // 取消所有商品的勾选
      });
      this.selectList = []; // 清空选中列表
    },
    // 单个商品选择
    check_item(index) {
      let id = this.list[index].id; // 找到当前点击的商品ID
      let i = this.selectList.indexOf(id); // 看看这个ID在不在选中列表里
      if (i > -1) {
        // 如果已经选中，就从选中列表里移除
        return this.selectList.splice(i, 1);
      }
      // 如果没选中，就加到选中列表里
      this.selectList.push(id);
    },
    // 切换全选/全不选状态
    checkAllFn() {
      // 如果当前是全选状态，就执行全不选；否则执行全选
      this.isCheckedAll ? this.un_check_all() : this.check_all();
    },
  },
});
